#ifndef MODULE_HEADER_REG_H
#define MODULE_HEADER_REG_H

#include <stdint.h>
//-------------- 1个字节 -------------------
//寄存器0x41：控制模块(更新设置 和 更新占空比)
//保留
// typedef struct{
//     union{
//         struct{
//             uint8_t usr     : 1;
//             uint8_t usg     : 1;
//             uint8_t usb     : 1;
//             uint8_t usw     : 1;
//             uint8_t usy     : 1;
//             uint8_t        : 3;
//         };
//         uint8_t value;
//         uint8_t data[1];
//     };
// }module_control_header_reg_t;


//-------------- 1个字节 -------------------
//寄存器0x--：保留未使用
typedef struct{
    union{
        struct{
            uint8_t unused : 8;
        };
        uint8_t value;
        uint8_t data[1];
    };
}module_reserved_reg_t;

//模块头部信息
typedef union 
{
   uint16_t value;
   uint8_t data[2];
}module_number_t;

typedef struct 
{   
    union{
        struct{
            module_number_t module_number;//2字节
            
            union{
                uint8_t hardware_version;
                uint8_t hardware_version_data[1];
            };//1字节
            union{
                uint8_t software_version;
                uint8_t software_version_data[1];
            };//1字节
            union{
                uint8_t module_type;
                uint8_t module_type_data[1];
            };//1字节
            union
            {
                struct {
                    union
                    {
                        struct
                        {
                        uint8_t I2C_USED                     : 1;
                        uint8_t INTERRUPT_USED               : 1;
                        uint8_t UPGRADE_USED                 : 1;
                        uint8_t UART_USED                    : 1;
                        uint8_t SPI_USED                     : 1;
                        uint8_t USB_HID_USED                 : 1;
                        uint8_t USB_UART_USED                : 1;
                        uint8_t SCHEDULE_CHECK_SW_USED       : 1;
                        };
                        uint8_t value;
                    }protocol_part_1;
                    union
                    {
                        struct
                        {
                        uint8_t SCHEDULE_SAVE_DATA_USED      : 1;
                        uint8_t UNUSED                       : 7;
                        };
                        uint8_t value;
                    }protocol_part_2;
                };
                uint8_t protocol_data[2];
            };//2字节
            
    
            uint8_t module_name[34];
        };
        uint8_t data[40];
    };

}module_header_reg_t;//40字节

#endif